接收数据,并设置来源主机的地址和端口。用于SOCK_DGRAM
类型的socket
。
function Coroutine\Socket->recvfrom(array &$peer, double $timeout = -1) : string | false;
此方法会引起协程调度,底层会立即挂起当前协程,并监听可读事件。可读事件触发,收到数据后执行recvfrom
系统调用获取数据包。
$peer
:对端地址和端口,引用类型。函数成功返回时会设置为数组,包括address
和port
两个元素$timeout
:超时设置,在规定的时间内未返回数据,recvfrom
方法会返回false
- 成功接收数据,返回数据内容,并设置
$peer
为数组 - 失败返回
false
,并设置errCode
属性,不修改$peer
的内容
go(function () {
$socket = new Co\Socket(AF_INET, SOCK_DGRAM, 0);
$socket->bind('127.0.0.1', 9601);
while (true) {
$peer = null;
$data = $socket->recvfrom($peer);
echo "[Server] recvfrom[{$peer['address']}:{$peer['port']}] : $data\n";
$socket->sendto($peer['address'], $peer['port'], "Swoole: $data");
}
});